package com.ztesoft.web.common;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.ztesoft.web.common.vo.TaskNotify;


/**
 * 常量定义<br>
 * 
 * @author <a href="mailto:lin.weibin@zte.com.cn">lin.wb</a> 2016年5月5日 上午11:23:08
 * @version 1.0
 */
public final class DMSConstant {

	/**
	 * 显示创建
	 */
	private DMSConstant() {
	}

	public static final Map<Integer, TaskNotify> taskInstList = new HashMap<Integer, TaskNotify>();
	
	/**
	 * 数据类型:表TABLE
	 */
	public static final int SOURCE_TYPE_TABLE = 1;

	/**
	 * 数据类型:文件FILE
	 */
	public static final int SOURCE_TYPE_FILE = 2;
	
	/**
	 * 分表标识（是）
	 */
	public static final String SUB_FLAG_T = "T";
	
	/**
	 * 归档类型（单表归档）
	 */
	public static final int ARCHIVE_TYPE_ONE = 0;
	
	/**
	 * 归档类型（关联归档）
	 */
	public static final int ARCHIVE_TYPE_REL = 1;
	
	/**
	 * 分表标识（否）
	 */
	public static final String SUB_FLAG_F = "0";
	
	/**
	 * 固定部分
	 */
	public static final int SUB_DEFINE_TYPE_FIXED = 0;
	
	/**
	 * 可变部分
	 */
	public static final int SUB_DEFINE_TYPE_CHANGE = 1;
	
	/**
	 * 归档方式：1条件归档
	 */
	public static final int ARCHIVE_MODE_CONDITION = 1;

	/**
	* 归档方式：2分区归档
	*/
	public static final int ARCHIVE_MODE_SUBAREA = 2;


	/**
	 * 归档方式：3整表归档
	 */
	public static final int ARCHIVE_MODE_WHOLETABLE = 3;

	/**
	 * ENUM_CODE-本地网
	 */
	public static final String ENUM_CODE_LATN_ID = "LATN_ID";

	/**
	 * 年月值NY
	 */
	public static final String FUNC_DEFINE_NY = "NY";

	/**
	 * 年月日NYR
	 */
	public static final String ENUM_CODE_NYR = "NYR";

	/**
	 * 账期BILLING_CYCLE_ID
	 */
	public static final String ENUM_CODE_BILLING_CYCLE_ID = "BILLING_CYCLE_ID";

	/**
	 * 清单序列
	 */
	public static final String ENUM_CODE_DETAIL_SEQ = "DETAIL_SEQ";

	/**
	 * 客户分组
	 */
	public static final String ENUM_CODE_CUST_CATEGORY_ID = "CUST_CATEGORY_ID";
	
	/**
	 * 进程号 add in 2015-9-27 by lwb
	 */
	public static final String ENUM_CODE__PID = "PID";

//	/**
//	 * 转换方法类
//	 */
//	public static final String EXCHANGE_FUNC = "com.ztesoft.cleaner.common.exchange.ExchangeFunc";

	/**
	 * 数据状态
	 */
	public enum Status {

		/**
		 * 00T:待处理
		 */
		PENDING("00T"),
		/**
		 * 00R:处理中
		 */
		PROCESSING("00R"),
		/**
		 * 00A:处理完成、有效状态
		 */
		SUCCESS("00A"),
		/**
		 * 00B 待备份
		 */
		TOBACKUP("00B"),
		/**
		 * 00C 待清理
		 */
		TOCLEANUP("00C"),
		/**
		 * 00F:处理失败
		 */
		FALSE("00F"),
		/**
		 * 0BF:备份失败
		 */
		BACKUPFALSE("0BF"),
		/**
		 * 0CF:清理失败
		 */
		CLEANUPFALSE("0CF"),
		/**
		 * 00P:暂停
		 */
		PAUSE("00P"),
		/**
		 * 01P:延时暂停
		 */
		DELAYPAUSE("01P"),
		/**
		 * 02P:系统暂停
		 */
		SYSPAUSE("02P"),
		/**
		 * 00C:取消
		 */
		CANCEL("00C"),
		/**
		 * 00X:作废
		 */
		CANCELLED("00X"),
		/**
		 * 00D:草稿箱
		 */
		DRAFT("00D"),
		
		/**50E数据为空*/
		DATA_NULL("50E"),
		/**
		 * 0DA:草稿箱-完整
		 */
		DRAFT_OK("0DA");
		private String status;

		Status(String status) {
			this.status = status;
		}
		
		//add by lin.wb
		public String getState() {
			return this.status;
		}
		@Override
		public String toString() {
			return String.valueOf(this.status);
		}
	};

	/**
	 * 保存草稿时，用默认值替换，String类型
	 */
	public static final String DRAFT_STRING_REPLACE = "#$def$#";
	/**
	 * 保存草稿时，用默认值替换，String类型，针对小于7个字符的字符串
	 */
	public static final String DRAFT_SHORT_STRING_REPLACE = "-";
	/**
	 * 保存草稿时，用默认值替换，int类型
	 */
	public static final int DRAFT_NUMBER_REPLACE = -9999;
	/**
	 * 保存草稿时，用默认值替换，int类型，长度小于7
	 */
	public static final int DRAFT_SHORT_NUMBER_REPLACE = -9;
	/**
	 * 保存草稿时，用默认值替换，char类型
	 */
	public static final char DRAFT_CHAR_REPLACE = '-';
	/**
	 * 保存草稿时，用默认值替换，Date类型
	 */
	public static final Date DRAFT_DATE_REPLACE = new Date(10000);
    
	/**
	 * 数据库种类 oracle
	 */
	public static final String DB_LINK_CATEGORY_ORACLE = "ORACLE";
	/**
	 * 数据库种类 informix
	 */
	public static final String DB_LINK_CATEGORY_INFORMIX = "INFORMIX";
	/**
	 * 数据库种类 mysql
	 */
	public static final String DB_LINK_CATEGORY_MYSQL = "MYSQL";
	/**
	 * 数据库种类 mdb
	 */
	public static final String DB_LINK_CATEGORY_MDB = "MDB";
	/**
	 * 数据库种类 tt
	 */
	public static final String DB_LINK_CATEGORY_TT = "timesten";
	
	/**
	 * 需要派生子任务（需要）
	 */
	public static final String NEED_SUBTASK_T = "T";
	
	/**
	 * 需要派生子任务（不需要）
	 */
	public static final String NEED_SUBTASK_F = "F";
	
	/**
	 * 是否审核通过(是)
	 */
	public static final String NEED_CHECK_T = "T";
	/**
	 * 是否审核通过(否)
	 */
	public static final String NEED_CHECK_F = "F";
	/**
	 * 源表字段是否归档（是）
	 */
	public static final String SOURCE_COL_FLAG_T = "T";
	
	/**
	 * 源表字段是否归档（否）
	 */
	public static final String SOURCE_COL_FLAG_F = "F";
	
	/**
	 * 是否审核通过：0--审核通过
	 */
	public static final int IS_CHECK_PASS = 0;

	/**
	* 是否审核通过：1--审核不通过
	*/
	public static final int IS_CHECK_NOPASS = 1;


	/**
	 * 是否审核通过：2--待审核
	 */
	public static final int IS_CHECK_DEALPASS = 2;
	
	/**
	 * 执行方式：1--系统自动执行
	 */
	public static final String EXEC_TYPE_AUTO = "1";

	/**
	* 执行方式：2--手工执行
	*/
	public static final String EXEC_TYPE_HAND = "2";
	
	/**
	 * 执行优先级：手工执行，则填为1；
	 */
	public static final int PRIORITY_HAND = 1;

	/**
	* 是否审核通过：自动执行，则填为2
	*/
	public static final int PRIORITY_AUTO = 2;
	
	/**
	 * 清理后进行分析：0-是
	 */
	public static final int DO_ANALYSE = 0;
	
	/**
	 * 清理后进行分析：1-是
	 */
	public static final int DONT_ANALYSE = 1;
	
	/**
	 * 处理环节：0-体检
	 */
	public static final int STAGE_CHECKUP= 0;
	
	/**
	 * 处理环节：1-备份
	 */
	public static final int STAGE_BACKUP = 1;
	
	/**
	 * 处理环节：2-清理
	 */
	public static final int STAGE_CLEANUP = 2;
	
	/**
	 * 操作系统类型:Linux
	 */
	public static final String  OS_TYPE_LINUX = "linux";

	/**
	 * 操作系统类型:AIX
	 */
	public static final String  OS_TYPE_AIX = "aix";

	/**
	 * 操作系统类型:HP-UX
	 */
	public static final String  OS_TYPE_HP_UX = "hp-ux";
	
	/**
	 * 主机连接方式：telnet
	 */
	public static final String  HOST_LINK_TELNET = "telnet";
	
	/**
	 * 主机连接方式：ftp
	 */
	public static final String  HOST_LINK_FTP = "ftp";
	
	/**
	 * 主机连接方式：ssh
	 */
	public static final String  HOST_LINK_SSH = "ssh";
	
	/**
	 * 监测类型：数据库
	 */
	public static final Integer  DETECTION_TYPE_DB = 1;
	
	/**
	 * 监测类型：表
	 */
	public static final Integer  DETECTION_TYPE_TABLE = 2;
	
	/**
	 * 监测项目：表空间
	 */
	public static final String  DETECTION_ITEM_TABLESPACE = "tablespace";
	
	/**
	 * 监测项目：主机内存
	 */
	public static final String  DETECTION_ITEM_MEMORY = "memory";
	
	/**
	 * 监测项目：主机CPU
	 */
	public static final String  DETECTION_ITEM_CPU = "cpu";
	
	/**
	 * 监测项目：主机磁盘空间
	 */
	public static final String  DETECTION_ITEM_DISKSPACE = "diskspace";

    /**
     * 与IOCP同步数据 -子系统标志
     */
    public static final int SUB_SYSTEM_ID = Configuration.getInt("SUB_SYSTEM_ID");
    
    public static final boolean WRITE_OPER_LOG = Configuration.getBoolean("WRITE_OPER_LOG",true);
    
    /**
     * 批量获取ID
     */
    public static final int TABLE_IDS = Configuration.getInt("INIT_TABLE_IDS", 100);

    /**
     * 批次插入量
     */
    public static final int BATCH_INSERT_SIZE = Configuration.getInt("BATCH_INSERT_SIZE", 500);
    
    public static final Map<Integer, Integer> dataRestore = new HashMap<Integer, Integer>();
    
    /////////////////命令加载/////////////////////////////////
    public static final String OS_TYPE_AIX_CPU = Configuration.getString("OS_TYPE_AIX_CPU");
    
    public static final String OS_TYPE_LINUX_CPU = Configuration.getString("OS_TYPE_LINUX_CPU");
    
    public static final String OS_TYPE_HP_UX_CPU = Configuration.getString("OS_TYPE_HP_UX_CPU");
    
    public static final String OS_TYPE_AIX_MEM_USED = Configuration.getString("OS_TYPE_AIX_MEM_USED");
    
    public static final String OS_TYPE_LINUX_MEM_USED = Configuration.getString("OS_TYPE_LINUX_MEM_USED");
    
    public static final String OS_TYPE_HP_UX_MEM_USED = Configuration.getString("OS_TYPE_HP_UX_MEM_USED");
    
    public static final String OS_TYPE_AIX_MEM_TOTAL = Configuration.getString("OS_TYPE_AIX_MEM_TOTAL");
    
    public static final String OS_TYPE_LINUX_MEM_FREE = Configuration.getString("OS_TYPE_LINUX_MEM_FREE");
    
    public static final String OS_TYPE_HP_UX_MEM_TOTAL = Configuration.getString("OS_TYPE_HP_UX_MEM_TOTAL");
    ///////////////命令加载///////////////////////////////////

    
	/**
	 * informix表索引查询语句
	 */
	public static final String IFX_IDX_SQL = Configuration.getString("IFX_IDX_SQL");

	/** oracle表索引查询语句 */
	public static final String ORL_IDX_SQL = Configuration.getString("ORL_IDX_SQL");

	/** mysql表索引查询语句*/
	public static final String MYSQL_IDX_SQL = Configuration.getString("MYSQL_IDX_SQL");
	
	/**
	 * 索引查询SQL语句Map，后续有添加完善此集合操作
	 */
	public static Map<String, String> IDX_SQL_MAP = new HashMap<String, String>();

	
	static {
		IDX_SQL_MAP.put("mysql", MYSQL_IDX_SQL);
		IDX_SQL_MAP.put("oracle", ORL_IDX_SQL);
		IDX_SQL_MAP.put("informix", IFX_IDX_SQL);
	}
	
	/**
	 * oracle锁模式查询SQL
	 */
	public static final String ORA_LMODE_SQL = Configuration.getString("ORA_LMODE_SQL");
	
	/**
	 * informix 锁模式执行查询命令 {0}库:{1}表
	 */
	public static final String IFX_LMODE_CMD = Configuration.getString("IFX_LMODE_CMD");
	
	/**
	 * 是否使用druid数据源
	 */
	public static final boolean IS_USE_DRUID = Configuration.getBoolean("USE_DRUID", true);
	
	/**
	 * 获取CPU执行命令	0 DmsConstant.CHECK_CMD_CPU
	 */
	public static final int CHECK_CMD_CPU = 0;
	/**
	 * 获取used-mem执行命令	1 DmsConstant.CHECK_CMD_USED_MEM
	 */
	public static final int CHECK_CMD_USED_MEM = 1;
	/**
	 * 监测内存命令	2 DmsConstant.CHECK_CMD_MEM
	 */
	public static final int CHECK_CMD_MEM = 2;

	//////////////////////////////////////////////////
	
	public static final String ORACLE = "oracle";
	
	public static final String MYSQL = "mysql";
	
	public static final String INFORMIX = "informix";
	
	public static final String MDB = "mdb";

	/** 表归档 体检&备份&清理 0*/
	public static final int TABLE_ARCHIVE = 0;
	
	/** 表清理 体检&清理1 */
	public static final int TABLE_CLEANUP = 1;
	
	/** 表体检  体检2 */
	public static final int TABLE_CHECKUP = 2;
	
	/**审批通过 */
	public static final int CHECK_PASSED = 0;
	
	/** 审批拒绝*/
	public static final int CHECK_REFUSED = 1;
	
	/** 待审批*/
	public static final int CHECK_WAITING = 2;
	
	public static final String SUCCESS = "success";
	public static final String FAIL = "fail";
	
	/**
	 * 处理环节：0-体检&备份&清理
	 */
	public static final int OPER_TYPE_CHECKUP= 0;
	
	/**
	 * 处理环节：1-体检&直接清理
	 */
	public static final int OPER_TYPE_BACKUP = 1;
	
	/**
	 * 处理环节：2--体检
	 */
	public static final int OPER_TYPE_CLEANUP = 2;
	
	/**
	 * 执行频率：1--循环执行
	 */
	public static final String EXEC_FREQUENCY_CYCLE = "0";

	/**
	* 执行频率：2--单次执行
	*/
	public static final String EXEC_FREQUENCY_SIGIN = "1";
	
	/**
	 * 循环类型：0--月循环
	 */
	public static final String CYCLE_TYPE_MONTH = "0";

	/**
	* 循环类型：1--日循环
	*/
	public static final String CYCLE_TYPE_DAY = "1";
	
	/**
	 * 数据恢复状态：0—数据正常归档，从未执行数据恢复
	 */
	public static final int RECOVER_STATE_EXE= 0;
	
	/**
	 * 数据恢复状态：1—数据恢复中
	 */
	public static final int RECOVER_STATE_ING = 1;
	
	/**
	 * 数据恢复状态：2—已恢复，计划暂不可进行数据归档
	 */
	public static final int RECOVER_STATE_ED_NO = 2;
	/**
	 * 数据恢复状态：3—已恢复，计划可以继续进行数据归档
	 */
	public static final int RECOVER_STATE_ED_YES = 3;
	/**
	 * 数据恢复状态：4—数据恢复失败
	 */
	public static final int RECOVER_STATE_ED_FAIL = 4;
	
	public static final String BACK_UP_PARAM = "full_backup_transable_variant";
	
	public static final String BACK_UP_TIME = "full_backup_time_variant";	
	/**
	 * 备份文件时需要打包追加的文件不存在
	 */
	public static final String BACKUP_FILE_FAIL = "备份文件时需要打包的文件不存在";
	
	public static final String DM_BACKUP_TYPE_MV = "0";
	
	public static final int DATA_TYPE_TABLE = 1;
	
	public static final int DATA_TYPE_FILE = 2;

	public static final boolean IS_CHECKUP = Configuration.getBoolean("IS_CHECKUP", false); 
	
	public static final boolean IS_BACKUP = Configuration.getBoolean("IS_BACKUP", false); 
	
	public static final boolean IS_CLEANUP = Configuration.getBoolean("IS_CLEANUP", false); 
}
